package com.dql.spring.config;

import com.dql.spring.bean.Color;
import com.dql.spring.bean.Person;
import com.dql.spring.annotation.MyAnnotation;
import com.dql.spring.condition.LinCondition;
import com.dql.spring.condition.WinCondition;
import com.dql.spring.selector.MyImportBeanDefinitionRegistrar;
import com.dql.spring.selector.MyImportSelector;
import org.springframework.context.annotation.*;
import org.springframework.stereotype.Component;

/**
 * @Author: DQL
 * @Date: 2022/4/28 10:25
 */
@Component
//@Conditional({WinCondition.class})  注解到类上，类中所有的bean都需要满足这个条件
@Import({Color.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})
//Import导入组件，id默认是组件的全类名
@ComponentScan("com.dql.spring.bean")
public class MainConfig2 {

    /**
     * singleton:单实例（默认值），ioc容器启动时会调用方法创建对象放到容器中，以后每次获取就从容器里拿（map.get()）
     * prototype:多实例，ioc容器启动时并不会调用方法创建对象放到容器中，每次获取时才会调用方法创建对象。
     * request:一次请求创建一个实例
     * session:同一个session创建一个实例
     */
    @Bean
    @Scope("prototype")
    public Person person(){
        return new Person("zhangsan", 20);
    }

    /**
     * 系统是win就创建win
     * 系统是lin就创建lin
     */
    @Bean("win")
    @MyAnnotation
    @Conditional({WinCondition.class})
    public Person person01() {
        return new Person("Windows", 80);
    }

    @Bean("lin")
    @Conditional({LinCondition.class})
    public Person person02() {
        return new Person("Linux", 90);
    }
}
